package sanbing.jcpplearning;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

public class IPAddressConversionExample {
    public static void main(String[] args) {
        // 原始字节流：C0 02 03 04
        byte[] ipBytes = {0x04, 0x03, 0x02, (byte) 0xC0};

        // 通过大端序将字节数组转换为整数
        int bigEndianInt = ByteBuffer.wrap(ipBytes).order(ByteOrder.BIG_ENDIAN).getInt();
        String bigEndianIP = convertIntToIP(bigEndianInt);

        // 通过小端序将字节数组转换为整数
        int littleEndianInt = ByteBuffer.wrap(ipBytes).order(ByteOrder.LITTLE_ENDIAN).getInt();
        String littleEndianIP = convertIntToIP(littleEndianInt);

        // 打印结果
        System.out.printf("原始字节流: 0x%02X 0x%02X 0x%02X 0x%02X\n", ipBytes[0], ipBytes[1], ipBytes[2], ipBytes[3]);
        System.out.printf("大端序解析结果: %s\n", bigEndianIP);
        System.out.printf("小端序解析结果: %s\n", littleEndianIP);
    }

    // 将整数值转换为IPv4地址字符串
    private static String convertIntToIP(int ip) {
        return String.format("%d.%d.%d.%d",
                (ip >> 24) & 0xFF,  // 第1字节
                (ip >> 16) & 0xFF,  // 第2字节
                (ip >> 8) & 0xFF,   // 第3字节
                ip & 0xFF);         // 第4字节
    }
}